/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package chat;

import com.ericsson.hosasdk.api.TpAddress;
import com.ericsson.nrgsdk.examples.tools.SDKToolkit;
import java.util.ArrayList;

/**
 *
 * @author Michał
 */
public class Analizator {
    
    private String adresSerwera;
    private Object[][] tablicaGrup;  //<string,List> 
    private SMSProcessor smsProcesor;

    public Analizator() {
        tablicaGrup = new Object[4][2];
        tablicaGrup[0][0]="Grupa1";
        tablicaGrup[1][0]="Grupa2";
        tablicaGrup[2][0]="Grupa3";
        tablicaGrup[3][0]="Grupa4";
        tablicaGrup[0][1]= new ArrayList();
        tablicaGrup[1][1]= new ArrayList();
        tablicaGrup[2][1]= new ArrayList();
        tablicaGrup[3][1]= new ArrayList();

    }
    

    void analizuj(String aSender, String aReceiver, String aMessageContent, SMSProcessor itsSMSProcessor) {
        if(adresSerwera==null)
            adresSerwera=aReceiver;
        if(smsProcesor==null)
            smsProcesor=itsSMSProcessor;
        
        String wiadomosc = aMessageContent.trim();
        int index = wiadomosc.indexOf(".");
        if(index>0)
            wiadomosc = wiadomosc.substring(0,index);
        
        if(wiadomosc.equalsIgnoreCase("grupa"))
            dolaczDoGrupy(aSender,aMessageContent);
        else{
            if(wiadomosc.equalsIgnoreCase("wyswietlGrupy"))
            {

                smsProcesor.sendSMS(aReceiver, aSender, getGrupy());
            }else{
                int grupa = getGrupa(aSender);
                if(wiadomosc.equalsIgnoreCase("lista")&&grupa>=0)
                {
                    smsProcesor.sendSMS(aReceiver, aSender, getUzytkownicy(aSender));
                }else
                {
                    if(grupa>=0)
                        wyslijDoGrupy(aSender,aReceiver,aMessageContent);
                    else
                    {
                        smsProcesor.sendSMS(aReceiver,aSender, "Musisz najpierw dolaczyc do grupy");
                    }
                }
            }
        }
        
    }

    private void dolaczDoGrupy(String aSender, String aMessageContent) {
        if(getGrupa(aSender)>0)
            ((ArrayList)tablicaGrup[getGrupa(aSender)][1]).remove(aSender);
        
        int index = aMessageContent.indexOf(".");
        String tmp = aMessageContent.substring(index+1);
        
        for (int i = 0; i < tablicaGrup.length; i++) {
            String grupa = (String) tablicaGrup[i][0];
            if(grupa.equalsIgnoreCase(tmp))
            {
                ((ArrayList)tablicaGrup[i][1]).add(aSender);
                smsProcesor.sendSMS(adresSerwera, aSender, "Dolaczyles do grupy "+grupa);
                return;
            }
        }
        smsProcesor.sendSMS(adresSerwera, aSender, "Nie znaleziono grupy "+tmp);
            
    }

    private void wyslijDoGrupy(String aSender, String aReceiver, String aMessageContent) {
        ArrayList lista = getListaUzytkownikow(aSender);
        for (int i = 0; i < lista.size(); i++) {
            smsProcesor.sendSMS(aReceiver,lista.get(i).toString(), aSender+": "+aMessageContent);
        }
    }

    private String getGrupy() {
        String grupy=tablicaGrup[0][0].toString();
        for (int i = 1; i < tablicaGrup.length; i++) {
            grupy = grupy +" , "+ tablicaGrup[i][0];
            
        }
        return grupy;
    }

    private String getUzytkownicy(String aSender) {
        for (int i = 0; i < tablicaGrup.length; i++) {
            ArrayList ludki = (ArrayList) tablicaGrup[i][1];
            if(ludki.contains(aSender))
            {
                return wypiszLudki(ludki);
            }
        }
        return null;
    }

    private String wypiszLudki(ArrayList ludki) {
        
        String tmp=ludki.get(0).toString();
        for (int i = 1; i < ludki.size(); i++) {
            tmp =tmp+" , "+ ludki.get(i);
            
        }
        return tmp;
    }

    private int getGrupa(String aSender) {
        for (int i = 0; i < tablicaGrup.length; i++) {
            ArrayList lista = (ArrayList) tablicaGrup[i][1];
            if(lista.contains(aSender))
                return i;
        }
        return -1;
    }

    private ArrayList getListaUzytkownikow(String aSender) {
        for (int i = 0; i < tablicaGrup.length; i++) {
            ArrayList ludki = (ArrayList) tablicaGrup[i][1];
            if(ludki.contains(aSender))
            {
                return ludki;
            }
        }
        return null;
    }
    
}
